<?php

namespace app\api\controller\v1;
use app\common\controller\Api;
/**
 *
 *
 * @icon fa fa-file
 */
class Wxlogin extends Api
{

    /**
     * Unit模型对象
     */
    private $appid = 'wx2bab6cd1400f48bb';
    private $secret = '2c4eec8b958e7be9c627ac1f369663de';

    protected $model = null;
    protected $noNeedRight=["dologin","hello"];
    protected $noNeedLogin=["dologin","hello"];
    public function _initialize()
    {
        parent::_initialize();
        return true;
    }

    /**
     * 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法
     * 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑
     * 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改
     */


    /**
     * 添加
     */
    public function dologin(){
        // 获取小程序端传来的 code
        $code = $this->request->post('verificationCode');

        if (!$code) {
            return json([200,
                'msg' => '缺少 code 参数'
            ]);
        }

        // 拼接微信登录接口的 URL
        $url = "https://api.weixin.qq.com/sns/jscode2session?appid={$this->appid}&secret={$this->secret}&js_code={$code}&grant_type=authorization_code";

        // 发送 HTTP 请求
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $response = curl_exec($ch);
        curl_close($ch);

        // 解析返回的 JSON 数据
        $result = json_decode($response, true);

        if (isset($result['errcode'])) {
            return json([
                'code' => 200,
                'msg' => '获取 openid 和 session_key 失败: ' . $result['errmsg']
            ]);
        }

        if($result==null) {
            return json([
                'code' => 0,
                'msg' => '连接不上，获取 openid 和 session_key 失败 '
            ]);
        }
        $openid = $result['openid'];
        $session_key = $result['session_key'];

        // 可以将 openid 和 session_key 存储到数据库或缓存中
        // 这里以存储到数据库为例
        $user = Db::name('users')->where('openid', $openid)->find();
        if (!$user) {
            // 如果用户不存在，则创建新用户
            $data = [
                'openid' => $openid,
                'session_key' => $session_key,
                'create_time' => time()
            ];
            Db::name('users')->insert($data);
        } else {
            // 如果用户存在，则更新 session_key
            Db::name('users')->where('openid', $openid)->update([
                'session_key' => $session_key,
                'update_time' => time()
            ]);
        }
        $Authorization=\app\admin\model\Users::setApiToken($user);

        return json([
            'code' => 200,
            'msg' => '登录成功',
            'openid' => $openid,
            'authorization' => $Authorization
        ]);

    }
}
